5
תגובות

Yii WIdget

פתח משתמש_217309 ,
זה הקוד widget
<?php
class CatgorRender extends CWidget
{
    public $catgor;
    public $num;
   
    public function run()
    {
        $this->render('catgor',array('num'=>$num, 'catgor'=>$catgor));
    }
}

?>


זה הview
<?php
print Html::openTag('div',array('class'=>(($num%2 == 1)?'right':'left').'_catgor'));
print Html::link(Html::image(
    'static/catgories/'.$catgor->id.'.jpg',
    'Catgor',
    array('width'=>300, 'height'=>150)
), 'catgor.html?id='.$catgor->id);
print Html::closeTag('div');
?>


זה הקריאה לwidget
$num = 1;
foreach($this->catgories as $catgor) {
    if($num % 2 != 0 && $num != 1)
        print "</div><div class='catgor_list'>";
    $this->widget('application.components.CatgorRender',array('num'=>$num,'catgor'=>$catgor));
    if($num == count($this->catgories)) print '</div>';
    $num++;
} # end foreach


מה הבעיה? הwidget לא מקבל משתנים שהורשתי לו
איך אני מוריש משתנים לwidget?

5 תשובות

avatar ענה intval ב 19 למאי 2012 #

אתה ניגש למשתנים של המחלקה ככה:

$this->render('catgor',array('num'=>$this->num, 'catgor'=>$this->catgor));


בנוסף יש כמה דברים שכדאי לחשוב על לשנות:
זה אומר שכל הקוד הזה של "קריאה לwidget" יושב לך ב view כלשהו. שהז לא טוב. לא אמור להיות כל כך הרבה קוד ב וויו.
שנית הווידגט מסוגל לספור בעצמו שורות ולשים הפרדה אחרי כל אלמנט. למה שלא תעביר לווידג'ט רק את רשימת הקטגוריות והוא כבר יסתדר משם לבד ?

avatar ענה משתמש_217309 ב 19 למאי 2012 #

אבל אם אני ארצה להציג קטגוריה בנפרד?
כאילו רק אחת

avatar ענה intval ב 19 למאי 2012 #

תעשה view נפרד של קטגוריה אחת ושהווידגט ירנדר הרבה כאלה.
אם במקום אחר תרצה להציג רק אחת - תפעיל את הוויו הזה לבד.

avatar ענה משתמש_217309 ב 19 למאי 2012 #

מה שאתה מתכוון זה שהרינדור של CatgoryRender יעשה בתוכו רינדור לקובץ אחר (של הקטגוריה) הרבה פעמים?

avatar ענה intval ב 19 למאי 2012 #

בדיוק